<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // function 构造函数名(形参1, 形参2, 形参3) { // 构造函数的形参与对象的普通属性是一般一致的
      //     this.属性名1 = 形参1
      //     this.属性名2 = 形参2// 属性的值，一般是通过同名的形参来赋值的
      //     this.属性名3 = 形参3
      //     this.方法名 = function () {

      //     }
      // }
      // 调用
      // const obj = new 构造函数名(实参1，实参2，实参3)
      // 简记
      // function 构造函数名() {
      //     this.属性 = 值;  // 当前的这个对象的
      //     this.方法 = function () { }
      // }
      // new 构造函数名()
      function Person(name, age, sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.sayHi = function (msg) {
          console.log(msg);
        };
      }
      const p = new Person("杰伦", 28, "男");
      console.log(p);
      // 获取属性
      console.log(p.name);
      // 调用方法
      p.sayHi("hello");
      console.log(p.sayHi("hello")); // undefiend

      // 1. 构造函数，相当于一个模板，可以创建一系列具有相同属性和方法的对象
      // 2. 通过构造函数创建对象的过程，就叫做实例化    ==> new 出一个对象的过程
      // 3. 创建好的这个对象  ==> 实例  / 实例对象

      // 注意:
      // 1. 构造函数名字首字母要大写
      // 2. 构造函数里 属性和方法前面必须添加 this
      // 2. 构造函数不需要 return 就可以返回结果
      // 3. 我们调用构造函数 必须使用 new
    </script>
  </body>
</html>
